Documentar los metodos de consultas que se pueden utilizar para hacer consultas desde el repositorio JPA para dar mas funcionalidad a la hora de usar el repositorio.
Ejemplo de funcion en el repostiorio:
public interface Repositorio extends CrudRepository<Persona, Integer> {
List<Persona> findAll();
}
Podemos usar la combinacion de palabras OrderBy para organizar el resultado de una consulta de la siguiente manera:
List<Persona> findAllByOrderByNameAsc();
De esta manera obtendriamos todos los resultados del repositorio ordenados por name de manera ascendente.
Hay que tener en cuenta un problema que tiene el OrderBy y es que es CaseSensitive lo que quiere decir que si hay palabras con mayusculas las ordenará antes de cualquiera palabra con minusculas, por lo tanto el orden no seria un orden alfabetico como tal, primero irian todas las palabras con mayusculas en orden alfabetico y despues todas las palabras con minusculas en orden alfabetico.
Si queremos ordenar por orden inverso usariamos Desc en vez de Asc
Ya que con OrderBy tenemos la limitacion del CaseSensitive podemos usar Sort de la siguiente manera:
En el repositorio iria un codigo como este:
List<Persona> findAll(Sort sort);
Y despues llamamos a la funcion tal que asi:
repositorio.findAll(Sort.by(Sort.Order.asc("name").ignoreCase()));
En este campo estariamos ordenando de manera ascendente por el campo name
De esta manera los resultados quedan ordenados independientemente de si las letras esten en mayusculas o minusculas
Cuando tenemos un repositorio de una entidad que tiene objetos dentro podemos utilizar la siguiente funcion para filtrar por objetos dentro del objeto:
findByMember_id(id)
Utilizamos la barra baja _ para indicar un atributo dentro de un objeto
De esta manera buscariamos por el campo id dentro del objeto member que estaría dentro del objeto asociado al repositorio en el que estamos haciendo la consulta
Si queremos tambien podemos hacer una busqueda como la anterior y a su vez ordenar por un criterio que sea el de un campo dentro de un objeto:
findByMember_idOrderBySkill_skillDesc(id)
En este caso estaríamos buscando por el campo id dentro del objeto member y a su vez estariamos ordenando los resultados por el campo skill dentro del objeto skill
Si quisiesemos realizar una busqueda por multiples campos podemos hacerlo de la siguiente manera:
findByNameAndLocation(String name, String location)
Utilizamos la palabra And para enlazar dos atributos
En este caso estariamos filtrando tanto por name como por location al mismo tiempo
Si queremos buscar por un conjunto de datos en una lista podemos hacerlo de la siguiente manera:
findByInventoryIdIn(List<Long> inventoryIdList)
Se utiliza la palabra In para realizar la busqueda en un conjunto
De esta manera buscariamos por por los InventoryId que coincidiesen con todos los ids en la lista invetoryIdList.
Spring | Repository | JPA | Consultas